<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>优先级队列</title>
</head>
<body>
    <script>
        class PriorityQueue{
            items = [];

            //实现插入方法,priority值越小,则优先级越高
            enqueue(element,priority){
                let queueElement = {element,priority};

                //如果插入的队列为空,则不用排序直接比较
                if(this.items.length == 0){
                    this.items.push(queueElement);
                }else{//否则需要比较优先级进行排序
                    //判断元素是否完成了插入,如果已进入队列则将标记置为true,否则不变
                    let flag = false;
                    for (let i = 0; i < this.items.length; i++) {
                        if(this.items[i].priority > queueElement.priority){
                            //把新元素插入到队列中的正确位置上
                            this.items.splice(i,0,queueElement);
                            //将是否插入队列的位置,置为true;
                            flag = true;
                            //元素已经插入,则直接跳出循环
                            break;
                        }
                    }
                    //如果没有完成插入,则代表此元素优先级最低,需要放到队列后端
                    if(!flag){
                        this.items.push(queueElement);
                    }
                }
            }

            //移除队列的第一项,并返回移除的元素
            dequeue(){
                return this.items.shift();
            }

            //返回队列的第一个元素,最先添加的也是最先被移除的
            front(){
                return this.items[0];
            }

            //判断队列是否为空,是则返回true,否则返回false
            isEmpty(){
                return this.items.length == 0;
            }

            //返回队列包含的元素个数
            size(){
                return this.items.length;
            }

            //打印队列中的元素
            toString(){
                console.log(this.items);
            }
        }
        let q = new PriorityQueue();
        q.enqueue('qwe',10);
        q.enqueue('wto',20);
        q.enqueue('ass',30);
        q.enqueue('tgp',89);
        q.enqueue('otg',15);
        q.enqueue('adc',11);
        q.toString();
    </script>
</body>
</html>